package config

import (
	"gopkg.in/yaml.v2"
	"io/ioutil"
	"log"
)

var CONF_INSTANCE *Conf

// 配置信息
type Conf struct {
	// 数据库配置信息
	DbConf `yaml:"db"`
	// 生成配置
	Generates []GenerateConf `yaml:"generates"`
}

// 数据库配置信息
type DbConf struct {
	// 主机地址
	Host string `yaml:"host"`
	// 端口
	Port int `yaml:"port"`
	// 用户名
	Username string `yaml:"username"`
	// 密码
	Password string `yaml:"password"`
	// 数据库名称
	Dbname string `yaml:"dbname"`
	// ssl 模式
	SslMode string `yaml:"sslMode"`
	// 时区
	Timezone string `yaml:"timezone"`
}

// 生成配置
type GenerateConf struct {
	// 表
	Tables []string `yaml:"tables"`
	// 项目源码目录
	ProjectDir string `yaml:"projectDir"`
	// 模块目录（相对于项目源码目录）
	ModuleDir string `yaml:"moduleDir"`
	// 模块名称
	ModuleName string `yaml:"moduleName"`
	// 项目名称
	ProjectName string `yaml:"projectName"`
	// 是否删除已存在的目录
	RemoveExistDir bool `yaml:"removeExistDir"`
	// 表关系定义
	TableRelations []TableRelationConf `yaml:"tableRelations"`
}

// 表关系定义
type TableRelationConf struct {
	// 表名
	Table string `yaml:"table"`
	// 列名
	Column string `yaml:"column"`
	// 关联的表
	ToTable string `yaml:"toTable"`
	// 关联的字段
	ToColumn string `yaml:"toColumn"`
}

func Setup(configFile string) {
	data, err := ioutil.ReadFile(configFile)
	if err != nil {
		log.Fatal(err)
	}
	err = yaml.Unmarshal(data, &CONF_INSTANCE)
	if err != nil {
		log.Fatal(err)
	}
}
